package cn.newtouch.pet.service.impl;

import cn.newtouch.basic.service.impl.BaseServiceImpl;
import cn.newtouch.pet.domain.Pet;
import cn.newtouch.pet.domain.PetType;
import cn.newtouch.pet.mapper.PetMapper;
import cn.newtouch.pet.mapper.PetTypeMapper;
import cn.newtouch.pet.service.IPetTypeService;
import org.apache.velocity.runtime.directive.Foreach;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

// @Transactional(readOnly = true,propagation = Propagation.SUPPORTS)
@Service
public class PetTypeServiceImpl extends BaseServiceImpl<PetType> implements IPetTypeService {

    @Autowired
    private PetTypeMapper petTypeMapper;

    @Override
    public List<PetType> typeTree() {

        List<PetType> all = petTypeMapper.loadAll();

        HashMap<Long, PetType> map = new HashMap<>();

        for (PetType petType : all) {
            map.put(petType.getId(),petType);
        }
        //新建一个typeTree
        ArrayList<PetType> typeTree = new ArrayList<>();

        for (PetType petType : all) {
            if(petType.getPid()==null){
                typeTree.add(petType);
            }else{
                //获取父级id
                Long pid=petType.getPid();
                //通过父级id查到该父级对象
                PetType parentPetType = map.get(pid);
                //把遍历的自己装入父级的子集合里面
                parentPetType.getChildren().add(petType);
            }
        }
        //返回类型树
        return typeTree;
    }

  /*
    @Override
    public List<Pet> petTree() {
        //将所有的宠物类型撞到map中  - 每次获取父宠物类型都从这里获取
        List<Pet> all = petMapper.loadAll();
        Map<Long,Pet> map  = new HashMap<>();
        for (Pet pet : all) {
            map.put(pet.getId(),pet);
        }

        //前端需要得到的集合数据 - 宠物类型树
        List<Pet> deptTree = new ArrayList<>();
        for (Pet pet:all){
            if(pet.getType_id() == null){//顶级宠物类型
                deptTree.add(pet);
            }else{//不是顶级宠物类型
                //1.想办法找到当前宠物类型的 父宠物类型
                Long parent_id = pet.getType_id();
                //这种从数据库查询的方式，每次通过id去查询 - 查询出来映射给实体domain，children集合中都会是空集合 - 没有任何数据
                //Pet parentPet = petMapper.loadById(parent_id);
                //下面这种是从Map中去获取的 - 以前装进去的对象还是会存在
                Pet parentPet = map.get(parent_id);
                //2.将自己装到  父宠物类型 的children中
                parentPet.getChildren().add(pet);
            }
        }
        return deptTree;
    }*/

}
